package com.diytomcat.util;

import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.diytomcat.catalina.Context;
import com.diytomcat.catalina.Engine;
import com.diytomcat.catalina.Host;

import cn.hutool.core.io.FileUtil;

/**
 * @author Leon Plious
 * @decription Jsoup解析conf/server.xml
 */
public class ServerXMLUtil {

	
	/**
	 * @description 获取配置文件conf/server.xml下配置的Context节点中的path，docBase
	 * @2020年6月9日下午4:25:13
	 * @return 试图名称和地址集合
	 */
	public static List<Context> getContext(){
		List<Context> contents = new ArrayList<>();
		// 读取conf/server.xml文件
		String xml = FileUtil.readUtf8String(Constant.serverXmlFile);
		// 
		Document d = Jsoup.parse(xml);
		
		Elements es = d.select("Context");
		for(Element e : es) {
			String path = e.attr("path");
			String docBase = e.attr("docBase");
			
			Context context = new Context(path, docBase);
			contents.add(context);
		}
		return contents;
	}
	
	
	/**
	 * @description 获取配置的主机名
	 * @2020年6月9日下午4:24:55
	 * @return 主机名
	 */
	public static List<Host> getHosts(Engine engine) {
		List<Host> hosts = new ArrayList<>();
		String xml = FileUtil.readUtf8String(Constant.serverXmlFile);
		Document d = Jsoup.parse(xml);
		
		Elements es = d.select("Host");
		for(Element e : es) {
			Host host = new Host(e.attr("name"), engine);
			hosts.add(host);
		}
		return hosts;
	}
	
	
	
	/**
	 * @description
	 * @2020年6月9日下午4:56:43
	 * @return
	 */
	public static String getEngineDefaultHost() {
		String xml = FileUtil.readUtf8String(Constant.serverXmlFile);
		Document d = Jsoup.parse(xml);
		
		Element engine = d.select("Engine").first();
		return engine.attr("defaultHost");
	}
	
	
	
	/**
	 * @description 
	 * @2020年6月9日下午5:38:36
	 * @return
	 */
	public static String getServiceName() {
		String xml = FileUtil.readUtf8String(Constant.serverXmlFile);
		Document d = Jsoup.parse(xml);
		
		Element service = d.select("Service").first();
		return service.attr("Catalina");
	}
}
